轨迹跟踪功能开发介绍

修订日期 修订版本 修订内容 修订人
2022.09.29 V0.1 初始化文档 赵锦强

[TOC]

1 功能描述

轨迹跟踪:机械臂按照指定的时间间隔依次运动到指定的目标点, 主要用于类似 servoJ 功能的实时数据下发接口

解决问题:用户输入任意目标状态数据,

  • 保证输出轨迹点的位置、速度和加速度在用户设定的运动约束范围之内(安全限制)
  • 保证输出轨迹能达到加速度级连续

支持运动类型:点到点之间的关节空间运动

目标点运动状态:完整的状态信息包括目标点的位置、速度、加速度以及运动时间间隔。如果用户能够给出完整的目标状态信息,则有利于提升算法的跟踪精度;如果用户不能给定目标点的速度或者加速度信息,则算法会采用状态估计的方法估计对应的信息。

2 接口介绍

/**
     * @brief 动态轨迹跟踪,能保证经过所有目标点(如果用户没有指定目标点的速度或加速度,则算法内部会进行状态估计), 目前只支持关节空间轨迹点
     * @param point: 跟踪的关键点, 需要指定ID信息
     * @param move_property: 运动属性信息(运动约束条件在该结构体中进行设置)
     * 用户必须显示指定目标点的运动时间间隔,且必须大于插补周期(5ms)
     * @param smooth_scale: 运动平滑程度,设置范围(0, 1], 1表示平滑性最好
     * @param delay_sacle: 运动延迟程度,设置范围(0, 1], 1表示跟踪响应最快
     * @param is_last_point: 是否是最后一个目标点,否为false, 是为true(表示动态轨迹跟踪结束)
     * @return 累计的运动延迟时间(累计的运动期望时间 - 累计的实际运动时间); 如果返回值 < 0 表示计算失败
     */
    double tpTrajectoryTracking(const PathPoint& point, const MoveProperty& move_property, const double& smooth_scale, const double& delay_sacle, const bool& is_last_point) = 0;

用户可以动态调用该接口, 通过给定目标点信息, 实现轨迹跟踪功能.

3 跟踪效果

光滑轨迹(理论仿真验证)-example01

输入: 按照10ms间隔, 给定连续的目标关节角, 图1表示关节位置的跟踪, 图2表示关节速度的跟踪. 图中虚线表示目标状态,实线表示跟踪状态.

图1. 目标关节位置跟踪(横轴表示轨迹点个数, 每两个轨迹点之间间隔5ms; 纵轴表示关节位置)

图2. 目标关节速度跟踪(横轴表示轨迹点个数, 每两个轨迹点之间间隔5ms; 纵轴表示关节速度)

4 开发注意事项

  • 轨迹跟踪是一个非实时规划的过程。目标点信息可以由用户动态给定,若轨迹队列执行完毕,用户没有给出下一个目标点,就会出现数据饥饿问题。

  • 对于目标速度、加速度不为0的情况,软件需要提前判断并采取急停或其他策略保证机械臂平稳运行。

results matching ""

    No results matching ""